package Day_0219.Redis;

/**
 * @author zxc
 * @date 2023/02/19 10:23
 **/
public class Redis_Common_Data_Structures {
    public static void main(String[] args) {
        /**
         * Redis中常见的数据结构
         * ===》
         * （1）基本数据结构 ：
         *  字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。
         *
         * （2）实用数据结构
         *  HyperLogLog、地理位置信息 Geo、发布订阅模式 Pub/Sub等等。
         *
         * （3）如果你说还玩过Redis Module，像BloomFilter，RedisSearch，Redis-ML;
         *
         */

        /**
         * Redis中基本数据类型的详解
         * ===》
         * 1.string（字符串类型）
         * 这是最简单的类型，就是普通的 set 和 get，做简单的 KV 缓存。
         *
         * set college szu
         *
         * 2.hash（哈希类型）
         * 这个是类似 map 的一种结构，这个一般就是可以将结构化的数据，
         * 比如一个对象（前提是这个对象没嵌套其他的对象）给缓存在 redis 里，
         * 然后每次读写缓存的时候，可以就操作 hash 里的某个字段。
         * ===》
         * 一般用于存储对象，由于在hash结构中，可以对于所存储对象的某个指定字段进行修改;
         *
         * 示例代码 ：
         * hset person name bingo
         * hset person age 20
         * hset person id 1
         * hget person name
         * person = {
         * "name": "bingo",
         * "age": 20,
         * "id": 1
         * }
         *
         * 3.list（列表）
         * ===>
         * list 是有序列表;
         * （1）比如，可以通过 list 存储一些列表型的数据结构，类似粉丝列表、文章的评论列表之类的东西。
         * （2）比如，可以通过 lrange 命令，读取某个闭区间内的元素，可以基于 list 实现分页查询，
         *  这个是很棒的一个功能，基于 redis 实现简单的高性能分页，
         *  可以做类似微博那种下拉不断分页的东西，性能高，就一页一页走
         *  ===》
         *  # 0开始位置，-1结束位置，结束位置为-1时，表示列表的最后一个位置，即查看所有。
         *  lrange mylist 0 -1
         *
         *  4.set（无序集合，带有去重特性;）
         * （1）set 是无序集合，自动去重。
         * （2）直接基于 set 将系统里需要去重的数据扔进去，自动就给去重了，
         *  如果你需要对一些数据进行快速全局去重，也可以基于 jvm 内存里的 HashSet 进行去重;
         *  ===》
         *  即，使用 JVM中HashSet 实现去重的功能的话，则只能够在单个机器上实现对于某些数据进行去重的功能;
         * （3）如果你的某个系统部署在多台机器上呢？
         *  得基于 redis 进行全局的 set 去重。
         *  ===》
         * （4）可以基于 set 交集、并集、差集的操作，
         *  比如交集吧，可以把两个人的粉丝列表整一个交集，看看俩人的共同好友是谁？。
         *  把两个大 V 的粉丝都放在两个 set 中，对两个 set 做交集。
         *  ===》
         *  即，使用Set（无序集合）来实现交集，并集和差集等等功能;
         *
         *  5.sorted set
         *  （1）sorted set 是排序的 set，去重但可以排序，写进去的时候给一个分数，自动根据分数排序。
         *  （2）可以简单地，将Sorted Set（有序集合）理解为hashmap结构，即key为排序分数，同时value为所要存储的数据;
         *  ===》
         *  示例代码 ：
         *  zadd board 85 zhangsan
         *  zadd board 72 lisi
         *  zadd board 96 wangwu
         *  zadd board 63 zhaoliu
         *  # 获取排名前三的用户（默认是升序，所以需要 rev 改为降序）
         *  zrevrange board 0 3
         *  # 获取某用户的排名
         *  zrank board zhaoliu
         *
         *
         *
         */
    }
}
